#include "Bullet3Dynamics/ConstraintSolver/b3JacobianEntry.h"
#ifdef __cplusplus
extern "C" {
#endif
b3JacobianEntry* bullet_Newb3JacobianEntry(){
	b3JacobianEntry* wrap_out = new b3JacobianEntry();
	return wrap_out;
}

b3JacobianEntry* bullet_Newb3JacobianEntry1(b3Matrix3x3* world2A,b3Matrix3x3* world2B,b3Vector3* rel_pos1,b3Vector3* rel_pos2,b3Vector3* jointAxis,b3Vector3* inertiaInvA,float massInvA,b3Vector3* inertiaInvB,float massInvB){
	b3Matrix3x3 const& c_arg_world2A=(b3Matrix3x3 const&)(*world2A);
	b3Matrix3x3 const& c_arg_world2B=(b3Matrix3x3 const&)(*world2B);
	b3Vector3 const& c_arg_rel_pos1=(b3Vector3 const&)(*rel_pos1);
	b3Vector3 const& c_arg_rel_pos2=(b3Vector3 const&)(*rel_pos2);
	b3Vector3 const& c_arg_jointAxis=(b3Vector3 const&)(*jointAxis);
	b3Vector3 const& c_arg_inertiaInvA=(b3Vector3 const&)(*inertiaInvA);
	b3Scalar const c_arg_massInvA=massInvA;
	b3Vector3 const& c_arg_inertiaInvB=(b3Vector3 const&)(*inertiaInvB);
	b3Scalar const c_arg_massInvB=massInvB;
	b3JacobianEntry* wrap_out = new b3JacobianEntry(c_arg_world2A,c_arg_world2B,c_arg_rel_pos1,c_arg_rel_pos2,c_arg_jointAxis,c_arg_inertiaInvA,c_arg_massInvA,c_arg_inertiaInvB,c_arg_massInvB);
	return wrap_out;
}

b3JacobianEntry* bullet_Newb3JacobianEntry2(b3Vector3* jointAxis,b3Matrix3x3* world2A,b3Matrix3x3* world2B,b3Vector3* inertiaInvA,b3Vector3* inertiaInvB){
	b3Vector3 const& c_arg_jointAxis=(b3Vector3 const&)(*jointAxis);
	b3Matrix3x3 const& c_arg_world2A=(b3Matrix3x3 const&)(*world2A);
	b3Matrix3x3 const& c_arg_world2B=(b3Matrix3x3 const&)(*world2B);
	b3Vector3 const& c_arg_inertiaInvA=(b3Vector3 const&)(*inertiaInvA);
	b3Vector3 const& c_arg_inertiaInvB=(b3Vector3 const&)(*inertiaInvB);
	b3JacobianEntry* wrap_out = new b3JacobianEntry(c_arg_jointAxis,c_arg_world2A,c_arg_world2B,c_arg_inertiaInvA,c_arg_inertiaInvB);
	return wrap_out;
}

b3JacobianEntry* bullet_Newb3JacobianEntry3(b3Vector3* axisInA,b3Vector3* axisInB,b3Vector3* inertiaInvA,b3Vector3* inertiaInvB){
	b3Vector3 const& c_arg_axisInA=(b3Vector3 const&)(*axisInA);
	b3Vector3 const& c_arg_axisInB=(b3Vector3 const&)(*axisInB);
	b3Vector3 const& c_arg_inertiaInvA=(b3Vector3 const&)(*inertiaInvA);
	b3Vector3 const& c_arg_inertiaInvB=(b3Vector3 const&)(*inertiaInvB);
	b3JacobianEntry* wrap_out = new b3JacobianEntry(c_arg_axisInA,c_arg_axisInB,c_arg_inertiaInvA,c_arg_inertiaInvB);
	return wrap_out;
}

b3JacobianEntry* bullet_Newb3JacobianEntry4(b3Matrix3x3* world2A,b3Vector3* rel_pos1,b3Vector3* rel_pos2,b3Vector3* jointAxis,b3Vector3* inertiaInvA,float massInvA){
	b3Matrix3x3 const& c_arg_world2A=(b3Matrix3x3 const&)(*world2A);
	b3Vector3 const& c_arg_rel_pos1=(b3Vector3 const&)(*rel_pos1);
	b3Vector3 const& c_arg_rel_pos2=(b3Vector3 const&)(*rel_pos2);
	b3Vector3 const& c_arg_jointAxis=(b3Vector3 const&)(*jointAxis);
	b3Vector3 const& c_arg_inertiaInvA=(b3Vector3 const&)(*inertiaInvA);
	b3Scalar const c_arg_massInvA=massInvA;
	b3JacobianEntry* wrap_out = new b3JacobianEntry(c_arg_world2A,c_arg_rel_pos1,c_arg_rel_pos2,c_arg_jointAxis,c_arg_inertiaInvA,c_arg_massInvA);
	return wrap_out;
}

float bullet_b3JacobianEntry_getDiagonal(b3JacobianEntry* c_this){
	b3Scalar c_out = c_this->getDiagonal();
	float wrap_out = (c_out);
	return wrap_out;
}

b3Vector3* bullet_b3JacobianEntry_GetFieldOfM_0MinvJt(b3JacobianEntry* c_this){
	return (b3Vector3*)(&c_this->m_0MinvJt);
}

b3Vector3* bullet_b3JacobianEntry_GetFieldOfM_1MinvJt(b3JacobianEntry* c_this){
	return (b3Vector3*)(&c_this->m_1MinvJt);
}

float bullet_b3JacobianEntry_GetFieldOfM_Adiag(b3JacobianEntry* c_this){
	return (float)(c_this->m_Adiag);
}

b3Vector3* bullet_b3JacobianEntry_GetFieldOfM_aJ(b3JacobianEntry* c_this){
	return (b3Vector3*)(&c_this->m_aJ);
}

b3Vector3* bullet_b3JacobianEntry_GetFieldOfM_bJ(b3JacobianEntry* c_this){
	return (b3Vector3*)(&c_this->m_bJ);
}

b3Vector3* bullet_b3JacobianEntry_GetFieldOfM_linearJointAxis(b3JacobianEntry* c_this){
	return (b3Vector3*)(&c_this->m_linearJointAxis);
}

float bullet_b3JacobianEntry_getNonDiagonal(b3JacobianEntry* c_this,b3JacobianEntry* jacB,float massInvA){
	b3JacobianEntry const& c_arg_jacB=(b3JacobianEntry const&)(*jacB);
	b3Scalar const c_arg_massInvA=massInvA;
	b3Scalar c_out = c_this->getNonDiagonal(c_arg_jacB,c_arg_massInvA);
	float wrap_out = (c_out);
	return wrap_out;
}

float bullet_b3JacobianEntry_getNonDiagonal1(b3JacobianEntry* c_this,b3JacobianEntry* jacB,float massInvA,float massInvB){
	b3JacobianEntry const& c_arg_jacB=(b3JacobianEntry const&)(*jacB);
	b3Scalar const c_arg_massInvA=massInvA;
	b3Scalar const c_arg_massInvB=massInvB;
	b3Scalar c_out = c_this->getNonDiagonal(c_arg_jacB,c_arg_massInvA,c_arg_massInvB);
	float wrap_out = (c_out);
	return wrap_out;
}

float bullet_b3JacobianEntry_getRelativeVelocity(b3JacobianEntry* c_this,b3Vector3* linvelA,b3Vector3* angvelA,b3Vector3* linvelB,b3Vector3* angvelB){
	b3Vector3 const& c_arg_linvelA=(b3Vector3 const&)(*linvelA);
	b3Vector3 const& c_arg_angvelA=(b3Vector3 const&)(*angvelA);
	b3Vector3 const& c_arg_linvelB=(b3Vector3 const&)(*linvelB);
	b3Vector3 const& c_arg_angvelB=(b3Vector3 const&)(*angvelB);
	b3Scalar c_out = c_this->getRelativeVelocity(c_arg_linvelA,c_arg_angvelA,c_arg_linvelB,c_arg_angvelB);
	float wrap_out = (c_out);
	return wrap_out;
}

#ifdef __cplusplus
}
#endif
